package ru.susu.algebra.matrix;

import java.math.BigInteger;

import ru.susu.algebra.transformers.IObjectTransformer;

/**
 * Преобразует матрицу, элементами которой являются целые числа {@link BigInteger}.
 * В результате все элементы будут взытя по модулю, заданному в конструкторе.
 *
 * @author akargapolov
 * @since: 03.05.2010
 */
public class BigIntMatrixModTransformer implements IObjectTransformer<Matrix>
{
	private BigInteger _mod;

	public BigIntMatrixModTransformer(BigInteger mod)
	{
		_mod = mod;
	}

	/**
	 * Преобразует матрицу, элементами которой являются целые числа {@link BigInteger}.
	 * @param matrix исходная матрица
	 * @return матрица - результат, все элементы взяты по модулю {@link #_mod}
	 */
	@Override
	public Matrix transformObject(Matrix matrix)
	{
		Matrix result = new Matrix(matrix.getRows(), matrix.getCols());

		for (int row = 0;row < matrix.getRows();row++)
		{
			for (int col = 0;col < matrix.getCols();col++)
			{
				BigInteger value = (BigInteger)matrix.getValue(row, col);
				value = value.mod(_mod);
				result.setValue(row, col, value);
			}
		}

		return result;
	}

}
